package com.zbkj.common.enums;

import com.zbkj.common.exception.CommonException;
import com.zbkj.common.model.project.EstimateFun;
import lombok.Getter;

import java.math.BigDecimal;
import java.util.Objects;

/**
 * @Auther:
 * @Date: 2024/10/8 17:48
 * @Description:
 */
public enum ProjectFunItem1Enum {
    //重用程度 枚举

    /**
     * 项目类型 1 国标  重用程度选项
     */
    ITEM101(101,"高",new BigDecimal("0.3333"), 1),
    ITEM102(102,"中",new BigDecimal("0.6667"), 1),
    ITEM103(103,"低",new BigDecimal("1.00"), 1),

    /**
     * 项目类型 2 军标  重用程度选项
     */
    ITEM201(201,"新研",new BigDecimal("1.00"), 2),
    ITEM202(202,"改造",new BigDecimal("0.50"), 2);

    @Getter
    private int item;
    @Getter
    private String name;
    @Getter
    private BigDecimal val;
    @Getter
    private int ptype; //项目类型


    ProjectFunItem1Enum(int item, String name,BigDecimal val, int ptype) {
        this.item = item;
        this.name = name;
        this.val = val;
        this.ptype = ptype;
    }

    public static String getItemName(Integer item) {
        ProjectFunItem1Enum itemEnum =  findItemEnum(null,item);
        return Objects.isNull(itemEnum) ? "" : itemEnum.getName();
    }

    public static boolean itemCheck(Integer ptype, Integer item) {
        if(Objects.isNull(item)) {
            return false;
        }
        ProjectFunItem1Enum item1Enum = findItemEnum(ptype,item);
        return Objects.nonNull(item1Enum);
    }

    public static ProjectFunItem1Enum findItemEnum(Integer ptype, Integer item) {
        if(Objects.isNull(item)) {
            return null;
        }
        for(ProjectFunItem1Enum itemEnum : ProjectFunItem1Enum.values())  {
            if(Objects.isNull(ptype) && itemEnum.getItem() == item) {
                return itemEnum;
            }
            if(Objects.nonNull(ptype) && itemEnum.getPtype() == ptype && itemEnum.getItem() == item) {
                return itemEnum;
            }
        }
        return null;
    }

    public static void estimateFunSet(Integer ptype, Integer item, EstimateFun estimateFun) {
        ProjectFunItem1Enum itemEnum = findItemEnum(ptype,item);
        if(itemEnum == null) {
            if(ProjectTypeEnum.isType1(ptype)) {
                estimateFun.setItme1(ITEM103.getItem());
                estimateFun.setItmeVal1(ITEM103.getVal());
            } else {
                estimateFun.setItme1(ITEM201.getItem());
                estimateFun.setItmeVal1(ITEM201.getVal());
            }
        } else {
            estimateFun.setItme1(itemEnum.getItem());
            estimateFun.setItmeVal1(itemEnum.getVal());
        }
    }

    public static void estimateFunSetAndCheck(Integer ptype, Integer item, EstimateFun estimateFun) {
        ProjectFunItem1Enum itemEnum = findItemEnum(ptype,item);
        if(itemEnum == null) {
            //校验不存在返回错误
            throw new CommonException("重用程度选项错误");
        }
        estimateFun.setItme1(itemEnum.getItem());
        estimateFun.setItmeVal1(itemEnum.getVal());
    }

    public static BigDecimal findItemVal(Integer ptype, Integer item) {
        ProjectFunItem1Enum itemEnum = findItemEnum(ptype,item);
        return Objects.isNull(itemEnum) ? null : itemEnum.getVal();
    }
}
